NLP相关
BoW模型
BoW模型忽略文本语法和语序等重要因素,把文本简单看作是若干词语的集合,词语之间都是相互独立的。
基于文本的BoW模型例子
两个简单文本:
John likes to watch movies,Mary likes too.
John also likes to watch football games.
构建词典:
{“John”: 1, “likes”: 2,”to”: 3, “watch”: 4, “movies”: 5,”also”: 6, “football”: 7, “games”: 8,”Mary”: 9, “too”: 10}
统计词频:
[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]
[1, 1,1, 1, 0, 1, 1, 1, 0, 0]
word2vec
https://www.zhihu.com/question/44832436
https://zhuanlan.zhihu.com/p/28179546
CBOW
CBOW是一种根据上下文预测当前词语出现概率的模型,其学习目标是最大化对数似然
输入层:上下文词向量
投影层:输入向量和均值
输出层:输出最大概率的w(t),可以看作是多分类问题。
对于多分类问题,Softmax显然是最常用的,但是由于他会对语料库的每一个词语计算一次输出概率并归一化,资源占用太大
Hierarchical Softmax
http://www.cnblogs.com/pinard/p/7243513.html
Hierarchical Softmax便是取代Softmax的基于树状结构的分类方法
非子节点相当于一个神经元,二分类决策生成1或0,代表向下左转或者右转;每个叶子子节点代表一个词语,以01进行编码,并且其编码序列对应一个时间序列,计算条件概率p(w|Context(w))。
判断左右的方法为sigmoid函数:
P(-)=1-P(+)
xw为当前向量,θ为逻辑回归的模型参数
seq2seq
y/article/details/53749693”>https://blog.csdn.net/jerry/article/details/53749693
基于编码器-解码器模型
每一个timestep向模型添加一个单词,直至最后一个单词,然后输出句子最后的语义向量c(c=h(xt),xt为最后一个单词),由于RNN记录了前面的状态,所以理论上c包含了整个句子的信息。
f为RNNCell结构(LSTM、GRU),g一般为softmax结构。
Decoder输入启动信号y0,,然后根据h0,y0,c计算出y1的概率分布,依此类推,直至到结束的特殊标识(如END)
在不同论文中预测第t个timestep的输出的公式:
在传播过程中有可能会丢失一些信息,而公式一中在每一个时间步中都加入了c,一定程度上减少了因为丢失信息而带来的误差
在翻译任务中,我们可以将待处理内容反向处理后再进行穿播,例如“abc”改为“cba”,经过这样的处理之后,效果提升很大,而且这样的处理能够很好的处理长句子
Attention Model
在解码过程中,编码器的每一个隐藏状态都被作为输入进行预测,这样Encoder就能利用更多的信息表达句子
https://blog.csdn.net/malefactor/article/details/50550211
Tree-RNN
http://www.hankcs.com/nlp/cs224n-tree-recursive-neural-networks-and-constituency-parsing.html
TreeRNN递归神经网络可以把一个树/图结构信息编码为一个向量,也就是把信息映射到一个语义向量空间中。这个语义向量空间满足某类性质,比如语义相似的向量距离更近。如果两句话(尽管内容不同)它的意思是相似的,那么把它们分别编码后的两个向量的距离也相近;反之就远。如下图所示:
C1和C2分别是表示两个子节点的向量,P是表示父节点的向量。子节点和父节点组成一个全连接神经网络,也就是子节点的每个神经元都和父节点的每个神经元两两相连。用矩阵W表示这些连接上的权重,它的维度将是d*2d,其中,d表示每个节点的维度。父节点的计算公式可以写成:
p=tanh(W[c1,c2]+b)
然后,把产生的父节点的向量和其他子节点的向量再次作为网络的输入,再次产生它们的父节点。最终,将得到根节点的向量,可以认为它是对整棵树的表示,这样就实现了把树映射为一个向量。
Tree-CNN
https://blog.csdn.net/zixiximm/article/details/54380289
共用卷积池化后的特征,全连接层不同
大词表问题
大词表问题实际指的是softmax的计算难度。早期的MT系统会使用小词表,但这无法从根本上解决问题。令一种方法是使用hierarchical softmax,建立树形词表,但是过于复杂,让模型对树形结构敏感不是对词语敏感。
我们可以每次只在词表上的一个子集进行训练,因为40%的词只出现一次,把训练均分为很多分,每一份的稀有词可能不会在其他语料中出现,我们可以让用词相似的文章进入同一自己,这样每个子集的词表的大小就更小
Byte Pair Encoding
这种方法试图找出所有有意义的“词素”,具体方法即为在词频统计表中统计所有的ngram组合为更长的ngram
Hybrid NMT
大部分情况下做词语级别的翻译,在需要的时候从字符级别翻译
遇到未知单词时,在字符级别进行搜索
ASR
end-to-end ASR
从音频到字符的概率模型p(Y|X):
Connectionist Temporal Classification
主体为一个双向RNN,上面一层是softmax
词表中有一个空格<b>,由于语音片段的随意性,导致一个字符c可能会存在在多个帧中,为了区分字符与字符的界限,所以引入空格,在解码过程中,需要限定字符只能转移到相同的字符或者空格
灰色代表无输出的概率
一些例子
可以看到,输出基本正确,只是有一些单词的字母有一些问题,我们可以不在使用字符级别而是使用单词级别的词表,识别出可能的单词后,用语言模型挑选出最可能的句子
sequence to sequence speech recognition with attention
采用类似于NMT的encoding-decoding的结构,根据之前的y和输入的x预测出y。
Listen Attend and Spell
简单有效的多标准分词
对于n种语言来说,需要n(n-1)对encoding-decoding来进行训练,类似的,针对n种分词标准,需要n个私有层,造成系统过度复杂,同时无法应对zero-shottranslation(缺乏两种语言之间的平行语料库)。
谷歌采用了不修改网络,而是在输入数据上做处理,只需要在输入数据中人工添加目标语种标识符,就可以把所有平行预料混合训练
类似的,我们只需要在句子首位添加一组标识符,就可以将多标准平行语料库进行混合训练。具体做法是用一对闭合的<dataset> </dataset>将每个句子包裹起来